package `01-agency`

/**
 * 属性委托给lazy函数 = 其本质还是委托给了类
 * lazy函数返回一个类
 *
 * by lazy  委托+懒加载  在使用的时候才加载。
 */
fun requestNum():Float{
    println("requestNum开始执行")
    return 0.5f
}
/**
 * 普通调用函数
 * 会在main() 之前运行，加载的时候就执行了requestNum()
 * requestNum()在加载requestNum变量时执行了一次。
 * main()中使用requestNum时不再执行。
 * 同java
 */
var requestNum = requestNum()


/**
 * by lazy
 *
 * by 委托
 *
 * lazy是一个函数，一个参数是函数的函数。
 *
 * 效果：
 * 在使用requestRetrun的时候才执行，且只执行一次，
 * 使用第二次及以后，只会输出结果
 * 在使用变量的时候才执行方法
 */
val requestRetrun:String by lazy{ requestData() }

fun requestData():String{
    println("requestData开始执行")
    Thread.sleep(1000)
    return "requestData 结果"
}


fun main() {
    println("开始运行")
    println(requestNum)
    println(requestNum)
    Thread.sleep(3000)

    println(requestRetrun)
    println(requestRetrun)
}